/* Software Name : AsmDex
 * Version : 1.0
 *
 * Copyright © 2012 France Télécom
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the copyright holders nor the names of its
 *    contributors may be used to endorse or promote products derived from
 *    this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */

package org.ow2.asmdex;

/**
 * Defines the Dalvik opcodes, access flags and array type codes.
 * 
 * @author Julien Névo
 */
public interface Opcodes {
	
	/**
	 * API level
	 */
	public static final int ASM4 = 0x40000;
	
	/**
	 * Spurious accessor used by the writer when it an instruction refers to a
	 * class, Method or a Field not parsed yet.
	 */
	public static final int ACC_UNKNOWN = 0x40000;  
	
	/**
	 * Public
	 */
	public final static int ACC_PUBLIC = 0x1;
	/**
	 * Private
	 */
	public final static int ACC_PRIVATE = 0x2;
	/**
	 * Protected
	 */
	public final static int ACC_PROTECTED = 0x4;
	/**
	 * Static
	 */
	public final static int ACC_STATIC = 0x8;
	/**
	 * Final
	 */
	public final static int ACC_FINAL = 0x10;
	/**
	 * Volatile
	 */
	public final static int ACC_VOLATILE = 0x40;
	/**
	 * Bridge
	 */
	public final static int ACC_BRIDGE = 0x40;
	/**
	 * Transient
	 */
	public final static int ACC_TRANSIENT = 0x80;
	/**
	 * Varargs
	 */
	public final static int ACC_VARARGS = 0x80;
	/**
	 * Native
	 */
	public final static int ACC_NATIVE = 0x100;
	/**
	 * Interface
	 */
	public final static int ACC_INTERFACE = 0x200;
	/**
	 * abstract 
	 */
	public final static int ACC_ABSTRACT = 0x400;
	/**
	 * Strict  
	 */
	public final static int ACC_STRICT = 0x800;
	/**
	 * Synthetic
	 */
	public final static int ACC_SYNTHETIC = 0x1000;
	/**
	 * Annotation
	 */
	public final static int ACC_ANNOTATION = 0x2000;
	/**
	 * Enum
	 */
	public final static int ACC_ENUM = 0x4000;
	/**
	 * Constructor
	 */
	public final static int ACC_CONSTRUCTOR = 0x10000;
	/**
	 * Synchronized
	 */
	public final static int ACC_DECLARED_SYNCHRONIZED = 0x20000;
	
	/**
	 * Annotation visibility build
	 */
	public final static int VISIBILITY_BUILD = 0x00;
	/**
	 * Annotation visibility runtime
	 */
	public final static int VISIBILITY_RUNTIME = 0x01;
	/**
	 * Annotation visibility system
	 */
	public final static int VISIBILITY_SYSTEM = 0x02;
	
	/**
	 * 
	 */
	public final static int NO_INDEX_SIGNED = -1;
	
	// Value formats in encoded_value encoding.
	/**
	 * Type id for values : byte 
	 */
	public final static int VALUE_BYTE = 0x00;
	/**
	 * Type id for values : short
	 */
	public final static int VALUE_SHORT = 0x02;
	/**
	 * Type id for values : char
	 */
	public final static int VALUE_CHAR = 0x03;
	/**
	 * Type id for values : int
	 */
	public final static int VALUE_INT = 0x04;
	/**
	 * Type id for values : long
	 */
	public final static int VALUE_LONG = 0x06;
	/**
	 * Type id for values : float
	 */
	public final static int VALUE_FLOAT = 0x10;
	/**
	 * Type id for values : double
	 */
	public final static int VALUE_DOUBLE = 0x11;
	/**
	 * Type id for values : string
	 */
	public final static int VALUE_STRING = 0x17;
	/**
	 * type
	 */
	public final static int VALUE_TYPE = 0x18;
	/**
	 * Type id for values : field
	 */
	public final static int VALUE_FIELD = 0x19;
	/**
	 * Type id for values : method
	 */
	public final static int VALUE_METHOD = 0x1a;
	/**
	 * Type id for values : enum
	 */
	public final static int VALUE_ENUM = 0x1b;
	/**
	 * Type id for values : array
	 */
	public final static int VALUE_ARRAY = 0x1c;
	/**
	 * Type id for values : annotation
	 */
	public final static int VALUE_ANNOTATION = 0x1d;
	/**
	 *Type id for values : null 
	 */
	public final static int VALUE_NULL = 0x1e;
	/**
	 * Type id for values : boolean
	 */
	public final static int VALUE_BOOLEAN = 0x1f;

	// Debug_info_item constants.
	/**
	 * Debug instruction : end sequence
	 */
	public final static int DBG_END_SEQUENCE = 0x00;
	/**
	 * Debug instruction : advance pc
	 */
	public final static int DBG_ADVANCE_PC = 0x01;
	/**
	 * Debug instruction : advance linie
	 */
	public final static int DBG_ADVANCE_LINE = 0x02;
	/**
	 * debug instruction : start local
	 */
	public final static int DBG_START_LOCAL = 0x03;
	/**
	 * Debug instruction : start local (extended)
	 */
	public final static int DBG_START_LOCAL_EXTENDED = 0x04;
	/**
	 * Debug instruction : end local
	 */
	public final static int DBG_END_LOCAL = 0x05;
	/**
	 * debug instruction : restart local
	 */
	public final static int DBG_RESTART_LOCAL = 0x06;
	/**
	 * debug instruction : set prologue end
	 */
	public final static int DBG_SET_PROLOGUE_END= 0x07;
	/**
	 * debug instruction : set epilogue begin
	 */
	public final static int DBG_SET_EPILOGUE_BEGIN = 0x08;
	/**
	 * debug instruction : set file
	 */
	public final static int DBG_SET_FILE = 0x09;
	
	/**
	 * Debug offset first special 
	 */
	public final static int DBG_FIRST_SPECIAL = 0x0a;
	/**
	 * Debug offset line base
	 */
	public final static int DBG_LINE_BASE = -4;
	/**
	 * Debug offset line range
	 */
	public final static int DBG_LINE_RANGE = 15;

	/**
	 * Header
	 */
	public static final int TYPE_HEADER_ITEM = 0x0000;
	/**
	 * String id
	 */
	public static final int TYPE_STRING_ID_ITEM = 0x0001; 
	/**
	 * Type id
	 */
	public static final int TYPE_TYPE_ID_ITEM = 0x0002; 
	/**
	 * Prototype Id
	 */
	public static final int TYPE_PROTO_ID_ITEM = 0x0003; 
	/**
	 * Field id
	 */
	public static final int TYPE_FIELD_ID_ITEM = 0x0004; 
	/**
	 * Method id
	 */
	public static final int TYPE_METHOD_ID_ITEM = 0x0005; 
	/**
	 * Class definition
	 */
	public static final int TYPE_CLASS_DEF_ITEM = 0x0006; 
	/**
	 * Map list
	 */
	public static final int TYPE_MAP_LIST = 0x1000; 
	/**
	 * Type list
	 */
	public static final int TYPE_TYPE_LIST = 0x1001;
	/**
	 * List of ref to annotation sets
	 */
	public static final int TYPE_ANNOTATION_SET_REF_LIST = 0x1002;
	/**
	 * Annotation set
	 */
	public static final int TYPE_ANNOTATION_SET_ITEM = 0x1003;
	/**
	 * Class data
	 */
	public static final int TYPE_CLASS_DATA_ITEM = 0x2000; 
	/**
	 * Code
	 */
	public static final int TYPE_CODE_ITEM = 0x2001; 
	/**
	 * String data
	 */
	public static final int TYPE_STRING_DATA_ITEM = 0x2002; 
	/**
	 * Debug info
	 */
	public static final int TYPE_DEBUG_INFO_ITEM = 0x2003; 
	/**
	 * Annotation
	 */
	public static final int TYPE_ANNOTATION_ITEM = 0x2004; 
	/**
	 * Encoded array
	 */
	public static final int TYPE_ENCODED_ARRAY_ITEM = 0x2005; 
	/**
	 * Annotations directory
	 */
	public static final int TYPE_ANNOTATIONS_DIRECTORY_ITEM = 0x2006;

	// Opcodes for the Dalvik Instructions.
	/**
	 * NOP
	 */
	public static final int INSN_NOP = 0x0;						// visitInsn
	/**
	 * MOVE
	 */
	public static final int INSN_MOVE = 0x1;					// visitVarInsn
	/**
	 * Move from 16
	 */
	public static final int INSN_MOVE_FROM16 = 0x2;
	/**
	 * Move 16
	 */
	public static final int INSN_MOVE_16 = 0x3;
	/**
	 * Move wide
	 */
	public static final int INSN_MOVE_WIDE = 0x4;
	/**
	 * Move wide from 16
	 */
	public static final int INSN_MOVE_WIDE_FROM16 = 0x5;
	/**
	 * Move wide 16
	 */
	public static final int INSN_MOVE_WIDE_16 = 0x6;
	/**
	 * Move object
	 */
	public static final int INSN_MOVE_OBJECT = 0x7;
	/**
	 * Move object from 16
	 */
	public static final int INSN_MOVE_OBJECT_FROM16 = 0x8;
	/**
	 * Moe object 16
	 */
	public static final int INSN_MOVE_OBJECT_16 = 0x9;
	/**
	 * Move result
	 */
	public static final int INSN_MOVE_RESULT = 0xa;				// visitIntInsn
	/**
	 * Move result wide
	 */
	public static final int INSN_MOVE_RESULT_WIDE = 0xb;
	/**
	 * Move result object
	 */
	public static final int INSN_MOVE_RESULT_OBJECT = 0xc;
	/**
	 * Move exception
	 */
	public static final int INSN_MOVE_EXCEPTION = 0xd;
	/**
	 * Return void
	 */
	public static final int INSN_RETURN_VOID = 0xe;				// visitInsn
	/**
	 * Return
	 */
	public static final int INSN_RETURN = 0xf;					// visitIntInsn
	/**
	 * Return wide
	 */
	public static final int INSN_RETURN_WIDE = 0x10;
	/**
	 * Return object
	 */
	public static final int INSN_RETURN_OBJECT = 0x11;
	/**
	 * Constant 4
	 */
	public static final int INSN_CONST_4 = 0x12;				// visitVarInsn
	/**
	 * Constant 16
	 */
	public static final int INSN_CONST_16 = 0x13;
	/**
	 * Constant
	 */
	public static final int INSN_CONST = 0x14;
	/**
	 * Constant High 16
	 */
	public static final int INSN_CONST_HIGH16 = 0x15;
	/**
	 * Constant Wide 16
	 */
	public static final int INSN_CONST_WIDE_16 = 0x16;
	/**
	 * Constant Wide 32
	 */
	public static final int INSN_CONST_WIDE_32 = 0x17;
	/**
	 * Constant Wide
	 */
	public static final int INSN_CONST_WIDE = 0x18;
	/**
	 * Constant Wide High 16
	 */
	public static final int INSN_CONST_WIDE_HIGH16 = 0x19;
	/**
	 * Cosntant String
	 */
	public static final int INSN_CONST_STRING = 0x1a;			// visitStringInsn
	/**
	 * 
	 */
	public static final int INSN_CONST_STRING_JUMBO = 0x1b;
	/**
	 * Constant Class
	 */
	public static final int INSN_CONST_CLASS = 0x1c;			// visitTypeInsn
	/**
	 * Monitor Enter
	 */
	public static final int INSN_MONITOR_ENTER = 0x1d;			// visitIntInsn
	/**
	 * Monitor Exit
	 */
	public static final int INSN_MONITOR_EXIT = 0x1e;
	/**
	 * Check Cast
	 */
	public static final int INSN_CHECK_CAST = 0x1f;				// visitTypeInsn
	/**
	 * Instance of
	 */
	public static final int INSN_INSTANCE_OF = 0x20;
	/**
	 * Array length
	 */
	public static final int INSN_ARRAY_LENGTH = 0x21;			// visitArrayLengthInsn
	/**
	 * New Instance
	 */
	public static final int INSN_NEW_INSTANCE = 0x22;			// visitTypeInsn
	/**
	 * New array
	 */
	public static final int INSN_NEW_ARRAY = 0x23;
	/**
	 * Filled new array
	 */
	public static final int INSN_FILLED_NEW_ARRAY = 0x24;		// visitMultiANewArrayInsn
	/**
	 * New array range
	 */
	public static final int INSN_FILLED_NEW_ARRAY_RANGE = 0x25;
	/**
	 * Fill array data
	 */
	public static final int INSN_FILL_ARRAY_DATA = 0x26;		// visitFillArrayDataInsn
	/**
	 * Throw
	 */
	public static final int INSN_THROW = 0x27;					// visitIntInsn
	/**
	 * Goto
	 */
	public static final int INSN_GOTO = 0x28;					// visitJumpInsn
	/**
	 * Goto 16
	 */
	public static final int INSN_GOTO_16 = 0x29;
	/**
	 * Goto 32
	 */
	public static final int INSN_GOTO_32 = 0x2a;
	/**
	 * Packed Switch
	 */
	public static final int INSN_PACKED_SWITCH_INSN = 0x2b;		// visitTableSwitchInsn 
	/**
	 * Sparse switch
	 */
	public static final int INSN_SPARSE_SWITCH_INSN = 0x2c;		// visitLookupSwitchInsn
	/**
	 * Compare Lower Float
	 */
	public static final int INSN_CMPL_FLOAT = 0x2d;				// visitOperationInsn
	/**
	 * Compare Greater Float
	 */
	public static final int INSN_CMPG_FLOAT = 0x2e;
	/**
	 * Compare Lower Double
	 */
	public static final int INSN_CMPL_DOUBLE = 0x2f;
	/**
	 * Compare Greater Double
	 */
	public static final int INSN_CMPG_DOUBLE = 0x30;
	/**
	 * Compare Long
	 */
	public static final int INSN_CMP_LONG = 0x31;
	/**
	 * If eq
	 */
	public static final int INSN_IF_EQ = 0x32;					// visitJumpInsn
	/**
	 * If not eq
	 */
	public static final int INSN_IF_NE = 0x33;
	/**
	 * If less than
	 */
	public static final int INSN_IF_LT = 0x34;
	/**
	 * If greater or equal
	 */
	public static final int INSN_IF_GE = 0x35;
	/**
	 * If greater
	 */
	public static final int INSN_IF_GT = 0x36;
	/**
	 * If lower or equal
	 */
	public static final int INSN_IF_LE = 0x37;
	/**
	 * If eq zero
	 */
	public static final int INSN_IF_EQZ = 0x38;
	/**
	 * If not zero
	 */
	public static final int INSN_IF_NEZ = 0x39;
	/**
	 * If less than zero
	 */
	public static final int INSN_IF_LTZ = 0x3a;
	/**
	 * If greater or equal to zero
	 */
	public static final int INSN_IF_GEZ = 0x3b;
	/**
	 * If greater than zero
	 */
	public static final int INSN_IF_GTZ = 0x3c;
	/**
	 * If less or equal to zero
	 */
	public static final int INSN_IF_LEZ = 0x3d;
	
	/**
	 * Array get
	 */
	public static final int INSN_AGET = 0x44;					// visitArrayOperationInsn
	/**
	 * Array get wide
	 */
	public static final int INSN_AGET_WIDE = 0x45;
	/**
	 * Array get object
	 */
	public static final int INSN_AGET_OBJECT = 0x46;
	/**
	 * Array get boolean
	 */
	public static final int INSN_AGET_BOOLEAN = 0x47;
	/**
	 * Array get byte
	 */
	public static final int INSN_AGET_BYTE = 0x48;
	/**
	 * Array get char
	 */
	public static final int INSN_AGET_CHAR = 0x49;
	/**
	 * Array get short
	 */
	public static final int INSN_AGET_SHORT = 0x4a;
	/**
	 * Array put
	 */
	public static final int INSN_APUT = 0x4b;
	/**
	 * Array put wide
	 */
	public static final int INSN_APUT_WIDE = 0x4c;
	/**
	 * Array put object
	 */
	public static final int INSN_APUT_OBJECT = 0x4d;
	/**
	 * Array put boolean
	 */
	public static final int INSN_APUT_BOOLEAN = 0x4e;
	/**
	 * Array put byte
	 */
	public static final int INSN_APUT_BYTE = 0x4f;
	/**
	 * Array put char
	 */
	public static final int INSN_APUT_CHAR = 0x50;
	/**
	 * Arrray put short
	 */
	public static final int INSN_APUT_SHORT = 0x51;
	
	/**
	 * Instance field get 
	 */
	public static final int INSN_IGET = 0x52;					// visitFieldInsn
	/**
	 * Instance field get wide
	 */
	public static final int INSN_IGET_WIDE = 0x53;
	/**
	 * Instance field get object
	 */
	public static final int INSN_IGET_OBJECT = 0x54;
	/**
	 * Instance field get boolean
	 */
	public static final int INSN_IGET_BOOLEAN = 0x55;
	/**
	 * Instance field get byte
	 */
	public static final int INSN_IGET_BYTE = 0x56;
	/**
	 * Instance field get char
	 */
	public static final int INSN_IGET_CHAR = 0x57;
	/**
	 * Instance field get short
	 */
	public static final int INSN_IGET_SHORT = 0x58;
	/**
	 * Instance field put
	 */
	public static final int INSN_IPUT = 0x59;
	/**
	 * Instance field put wide
	 */
	public static final int INSN_IPUT_WIDE = 0x5a;
	/**
	 * Instance field put object
	 */
	public static final int INSN_IPUT_OBJECT = 0x5b;
	/**
	 * Instance field put boolean
	 */
	public static final int INSN_IPUT_BOOLEAN = 0x5c;
	/**
	 * Instance field put byte
	 */
	public static final int INSN_IPUT_BYTE = 0x5d;
	/**
	 * Instance field put char
	 */
	public static final int INSN_IPUT_CHAR = 0x5e;
	/**
	 * Instance field put short
	 */
	public static final int INSN_IPUT_SHORT = 0x5f;

	/**
	 * Static get
	 */
	public static final int INSN_SGET = 0x60;
	/**
	 * Static get wide
	 */
	public static final int INSN_SGET_WIDE = 0x61;
	/**
	 * Static get object
	 */
	public static final int INSN_SGET_OBJECT = 0x62;
	/**
	 * Static get boolean
	 */
	public static final int INSN_SGET_BOOLEAN = 0x63;
	/**
	 * Static get byte
	 */
	public static final int INSN_SGET_BYTE = 0x64;
	/**
	 * Static get char
	 */
	public static final int INSN_SGET_CHAR = 0x65;
	/**
	 * Static get short
	 */
	public static final int INSN_SGET_SHORT = 0x66;
	/**
	 * Static put
	 */
	public static final int INSN_SPUT = 0x67;
	/**
	 * Static put wide
	 */
	public static final int INSN_SPUT_WIDE = 0x68;
	/**
	 * Static put object
	 */
	public static final int INSN_SPUT_OBJECT = 0x69;
	/**
	 * Static put boolean
	 */
	public static final int INSN_SPUT_BOOLEAN = 0x6a;
	/**
	 * Static put byte
	 */
	public static final int INSN_SPUT_BYTE = 0x6b;
	/**
	 * Static put char
	 */
	public static final int INSN_SPUT_CHAR = 0x6c;
	/**
	 * Static put short
	 */
	public static final int INSN_SPUT_SHORT = 0x6d;
	
	/**
	 * Invoke virtual
	 */
	public static final int INSN_INVOKE_VIRTUAL = 0x6e;			// visitMethodInsn
	/**
	 * Invoke super
	 */
	public static final int INSN_INVOKE_SUPER = 0x6f;
	/**
	 * Invoke direct
	 */
	public static final int INSN_INVOKE_DIRECT = 0x70;
	/**
	 * Invoke static
	 */
	public static final int INSN_INVOKE_STATIC = 0x71;
	/**
	 * Invoke interface
	 */
	public static final int INSN_INVOKE_INTERFACE = 0x72;
	
	/**
	 * Invoke virtual range
	 */
	public static final int INSN_INVOKE_VIRTUAL_RANGE = 0x74;
	/**
	 * Invoke super range
	 */
	public static final int INSN_INVOKE_SUPER_RANGE = 0x75;
	/**
	 * Invoke direct range
	 */
	public static final int INSN_INVOKE_DIRECT_RANGE = 0x76;
	/**
	 * Invoke static range
	 */
	public static final int INSN_INVOKE_STATIC_RANGE = 0x77;
	/**
	 * Invoke interface range
	 */
	public static final int INSN_INVOKE_INTERFACE_RANGE = 0x78;
	
	/**
	 * Invoke neg range
	 */
	public static final int INSN_NEG_INT = 0x7b;				// visitOperationInsn
	/**
	 * Not integer 
	 */
	public static final int INSN_NOT_INT = 0x7c;
	/**
	 * Neg long
	 */
	public static final int INSN_NEG_LONG = 0x7d;
	/**
	 * Not long
	 */
	public static final int INSN_NOT_LONG = 0x7e;
	/**
	 * Neg float
	 */
	public static final int INSN_NEG_FLOAT = 0x7f;
	/**
	 * Neg double
	 */
	public static final int INSN_NEG_DOUBLE = 0x80;
	/**
	 * Int to long
	 */
	public static final int INSN_INT_TO_LONG = 0x81;
	/**
	 * Int to float
	 */
	public static final int INSN_INT_TO_FLOAT = 0x82;
	/**
	 * Int to double
	 */
	public static final int INSN_INT_TO_DOUBLE = 0x83;
	/**
	 * Long to int
	 */
	public static final int INSN_LONG_TO_INT = 0x84;
	/**
	 * Long to float
	 */
	public static final int INSN_LONG_TO_FLOAT = 0x85;
	/**
	 * Long to double
	 */
	public static final int INSN_LONG_TO_DOUBLE = 0x86;
	/**
	 * Float to int
	 */
	public static final int INSN_FLOAT_TO_INT = 0x87;
	/**
	 * Float to long
	 */
	public static final int INSN_FLOAT_TO_LONG = 0x88;
	/**
	 * Float to double
	 */
	public static final int INSN_FLOAT_TO_DOUBLE = 0x89;
	/**
	 * Double to int
	 */
	public static final int INSN_DOUBLE_TO_INT = 0x8a;
	/**
	 * Double to long
	 */
	public static final int INSN_DOUBLE_TO_LONG = 0x8b;
	/**
	 * Double to float
	 */
	public static final int INSN_DOUBLE_TO_FLOAT = 0x8c;
	/**
	 * Int to byte
	 */
	public static final int INSN_INT_TO_BYTE = 0x8d;
	/**
	 * Int to char
	 */
	public static final int INSN_INT_TO_CHAR = 0x8e;
	/**
	 * Int to short
	 */
	public static final int INSN_INT_TO_SHORT = 0x8f;
	
	/**
	 * Add int
	 */
	public static final int INSN_ADD_INT = 0x90;
	/**
	 * Substract int
	 */
	public static final int INSN_SUB_INT = 0x91;
	/**
	 * Multiply int
	 */
	public static final int INSN_MUL_INT = 0x92;
	/**
	 * Divide int
	 */
	public static final int INSN_DIV_INT = 0x93;
	/**
	 * Remainder int
	 */
	public static final int INSN_REM_INT = 0x94;
	/**
	 * And int
	 */
	public static final int INSN_AND_INT = 0x95;
	/**
	 * Or int
	 */
	public static final int INSN_OR_INT = 0x96;
	/**
	 * Xor int
	 */
	public static final int INSN_XOR_INT = 0x97;
	/**
	 * Shift left int
	 */
	public static final int INSN_SHL_INT = 0x98;
	/**
	 * Sifht right int
	 */
	public static final int INSN_SHR_INT = 0x99;
	/**
	 * Unsigned Shift right int
	 */
	public static final int INSN_USHR_INT = 0x9a;
	/**
	 * Add long
	 */
	public static final int INSN_ADD_LONG = 0x9b;
	/**
	 * Subtract long
	 */
	public static final int INSN_SUB_LONG = 0x9c;
	/**
	 * Multiply long
	 */
	public static final int INSN_MUL_LONG = 0x9d;
	/**
	 * Divide long
	 */
	public static final int INSN_DIV_LONG = 0x9e;
	/**
	 * Remainder long
	 */
	public static final int INSN_REM_LONG = 0x9f;
	/**
	 * And long
	 */
	public static final int INSN_AND_LONG = 0xa0;
	/**
	 * Or long
	 */
	public static final int INSN_OR_LONG = 0xa1;
	/**
	 * Xor long
	 */
	public static final int INSN_XOR_LONG = 0xa2;
	/**
	 * Shift left long
	 */
	public static final int INSN_SHL_LONG = 0xa3;
	/**
	 * Shift right long
	 */
	public static final int INSN_SHR_LONG = 0xa4;
	/**
	 * Unsigned shift right long
	 */
	public static final int INSN_USHR_LONG = 0xa5;
	
	/**
	 * Add float
	 */
	public static final int INSN_ADD_FLOAT = 0xa6;
	/**
	 * Substract float
	 */
	public static final int INSN_SUB_FLOAT = 0xa7;
	/**
	 * Multiply float
	 */
	public static final int INSN_MUL_FLOAT = 0xa8;
	/**
	 * Divide float
	 */
	public static final int INSN_DIV_FLOAT = 0xa9;
	/**
	 * Remainder float
	 */
	public static final int INSN_REM_FLOAT = 0xaa;
	/**
	 * Add double
	 */
	public static final int INSN_ADD_DOUBLE = 0xab;
	/**
	 * Substract double
	 */
	public static final int INSN_SUB_DOUBLE = 0xac;
	/**
	 * Multiply double
	 */
	public static final int INSN_MUL_DOUBLE = 0xad;
	/**
	 * Divide double
	 */
	public static final int INSN_DIV_DOUBLE = 0xae;
	/**
	 * Remainder double
	 */
	public static final int INSN_REM_DOUBLE = 0xaf;
	
	/**
	 * Add integer two addresses
	 */
	public static final int INSN_ADD_INT_2ADDR = 0xb0;
	/**
	 * Sub integer two addresses
	 */
	public static final int INSN_SUB_INT_2ADDR = 0xb1;
	/**
	 * Multiply integer two addresses
	 */
	public static final int INSN_MUL_INT_2ADDR = 0xb2;
	/**
	 * Divide integer two addresses
	 */
	public static final int INSN_DIV_INT_2ADDR = 0xb3;
	/**
	 * Remainder integer two addresses
	 */
	public static final int INSN_REM_INT_2ADDR = 0xb4;
	/**
	 * And integer two addresses
	 */
	public static final int INSN_AND_INT_2ADDR = 0xb5;
	/**
	 * Or integer two addresses
	 */
	public static final int INSN_OR_INT_2ADDR = 0xb6;
	/**
	 * Xor integer two addresses
	 */
	public static final int INSN_XOR_INT_2ADDR = 0xb7;
	/**
	 * Shift left integer two addresses 
	 */
	public static final int INSN_SHL_INT_2ADDR = 0xb8;
	/**
	 * Shift right integer two addresses
	 */
	public static final int INSN_SHR_INT_2ADDR = 0xb9;
	/**
	 * Unsigned shift right integer two addresses
	 */
	public static final int INSN_USHR_INT_2ADDR = 0xba;
	
	/**
	 * Add long two addresses
	 */
	public static final int INSN_ADD_LONG_2ADDR = 0xbb;
	/**
	 * substract long two addresses
	 */
	public static final int INSN_SUB_LONG_2ADDR = 0xbc;
	/**
	 * multiply long two addresses
	 */
	public static final int INSN_MUL_LONG_2ADDR = 0xbd;
	/**
	 * divide long two addresses
	 */
	public static final int INSN_DIV_LONG_2ADDR = 0xbe;
	/**
	 * Remainder long two addresses
	 */
	public static final int INSN_REM_LONG_2ADDR = 0xbf;
	/**
	 * And long two addresses
	 */
	public static final int INSN_AND_LONG_2ADDR = 0xc0;
	/**
	 * Or long two addresses
	 */
	public static final int INSN_OR_LONG_2ADDR = 0xc1;
	/**
	 * Exclusive or long two addresses
	 */
	public static final int INSN_XOR_LONG_2ADDR = 0xc2;
	/**
	 * Shift left long two addresses
	 */
	public static final int INSN_SHL_LONG_2ADDR = 0xc3;
	/**
	 * Shift right long two addresses
	 */
	public static final int INSN_SHR_LONG_2ADDR = 0xc4;
	/**
	 * Unsigned shift right long two addresses
	 */
	public static final int INSN_USHR_LONG_2ADDR = 0xc5;
	
	/**
	 * Add float two addresses
	 */
	public static final int INSN_ADD_FLOAT_2ADDR = 0xc6;
	/**
	 * Substract float two addresses
	 */
	public static final int INSN_SUB_FLOAT_2ADDR = 0xc7;
	/**
	 * Multiply float two addresses
	 */
	public static final int INSN_MUL_FLOAT_2ADDR = 0xc8;
	/**
	 * Divide float two addresses
	 */
	public static final int INSN_DIV_FLOAT_2ADDR = 0xc9;
	/**
	 * Remainder float two addresses
	 */
	public static final int INSN_REM_FLOAT_2ADDR = 0xca;
	/**
	 * Add double two addresses
	 */
	public static final int INSN_ADD_DOUBLE_2ADDR = 0xcb;
	/**
	 * Substract double two addresses
	 */
	public static final int INSN_SUB_DOUBLE_2ADDR = 0xcc;
	/**
	 * Multiply double two addresses
	 */
	public static final int INSN_MUL_DOUBLE_2ADDR = 0xcd;
	/**
	 * Divide double two addresses
	 */
	public static final int INSN_DIV_DOUBLE_2ADDR = 0xce;
	/**
	 * Remainder double two addresses
	 */
	public static final int INSN_REM_DOUBLE_2ADDR = 0xcf;
	
	/**
	 * Add integer literal 16
	 */
	public static final int INSN_ADD_INT_LIT16 = 0xd0;
	/**
	 * Reverse substract integer literal 16
	 */
	public static final int INSN_RSUB_INT_LIT16 = 0xd1;
	/**
	 * Multiply integer literal 16
	 */
	public static final int INSN_MUL_INT_LIT16 = 0xd2;
	/**
	 * Divide integer literal 16
	 */
	public static final int INSN_DIV_INT_LIT16 = 0xd3;
	/**
	 * Remainder integer literal 16
	 */
	public static final int INSN_REM_INT_LIT16 = 0xd4;
	/**
	 * And integer literal 16
	 */
	public static final int INSN_AND_INT_LIT16 = 0xd5;
	/**
	 * Or integer literal 16
	 */
	public static final int INSN_OR_INT_LIT16 = 0xd6;
	/**
	 * Exclusive Or integer literal 16
	 */
	public static final int INSN_XOR_INT_LIT16 = 0xd7;
	
	/**
	 * Add integer literal 8
	 */
	public static final int INSN_ADD_INT_LIT8 = 0xd8;
	/**
	 * Reverve substract integer literal 8
	 */
	public static final int INSN_RSUB_INT_LIT8 = 0xd9;
	/**
	 * Multiply integer literal 8
	 */
	public static final int INSN_MUL_INT_LIT8 = 0xda;
	/**
	 * Divide integer literal 8
	 */
	public static final int INSN_DIV_INT_LIT8 = 0xdb;
	/**
	 * Remainder integer literal 8
	 */
	public static final int INSN_REM_INT_LIT8 = 0xdc;
	/**
	 * And integer literal 8
	 */
	public static final int INSN_AND_INT_LIT8 = 0xdd;
	/**
	 * Or integer literal 8
	 */
	public static final int INSN_OR_INT_LIT8 = 0xde;
	/**
	 * Exclusive or integer literal 8
	 */
	public static final int INSN_XOR_INT_LIT8 = 0xdf;
	/**
	 * Shift left integer literal 8
	 */
	public static final int INSN_SHL_INT_LIT8 = 0xe0;
	/**
	 * Shift right integer literal 8
	 */
	public static final int INSN_SHR_INT_LIT8 = 0xe1;
	/**
	 * Unsigned shift right integer literal 8
	 */
	public static final int INSN_USHR_INT_LIT8 = 0xe2;

}
